/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package collections;
import java.util.*;
/**
 *
 * @author anonymous
 */
public class Conjunto implements IConjunto<Integer,Conjunto>,Iterable<Integer> {
    private ArrayList<Integer> conjunto = new ArrayList<>();
    
    public boolean isEmpty() {
        return conjunto.isEmpty();
    }

    @Override
    public void removeAll() {
        conjunto.removeAll(conjunto);
    }
    
    public boolean remove(Integer e) {
       return conjunto.remove(e);
    }

    public int size() {
        return conjunto.size();
    }

    @Override
    public boolean add(Integer t) {
        if( !this.exists(t) ){
            conjunto.add(t);
            return true;
        }
        return false;
    }

    @Override
    public boolean exists(Integer t) {
        return conjunto.contains(t);
    }

    @Override
    public Conjunto intersection(Conjunto a) {
        Conjunto intersection = new Conjunto();
        for( Integer i : a) {
            if( this.exists(i) ) {
                intersection.add(i);
            }
        }
        return intersection;
    }
    @Override
    public Conjunto union(Conjunto a) {
        Conjunto union = new Conjunto();
        union.addAll(a);
        union.addAll(this);
        return union;
    }
    
    @Override
    public boolean addAll(Conjunto a) {
        boolean cambio = false;
        for( Integer i: a) {
            if(this.add(i))
                    cambio = true;
        }
        return cambio;
    }
    
    @Override
    public void sort() {
        int tmp = 0;
        for(int i = 0;i<conjunto.size();i++){
          for(int j = (conjunto.size()-1);j>=(i+1);j--){
            if(conjunto.get(j) < conjunto.get(j-1)){
              tmp = conjunto.get(j);
              conjunto.set(j, conjunto.get(j-1));
              conjunto.set(j-1, tmp);
            }
          }
        }
    }
    
    @Override
    public Conjunto difference(Conjunto a) {
        Conjunto difference = new Conjunto();
        for( Integer i : a) {
            if( !this.exists(i)  ) {
                difference.add(i);
            }
        }
        return difference;
    }
    
    @Override
    public Iterator<Integer> iterator() {
        return conjunto.iterator();
    }
    
    public String toString() {
        return conjunto.toString();
    }
}
